package lanqiao.dontaiguihua.dfs;

import java.util.Scanner;
//正则问题
public class Lan106 {
    static int pos=-1;
    static String s=null;
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        s=sc.nextLine();
        System.out.println(dfs());
        sc.close();
    }
    private static int dfs(){
        int count=0;
        int max=0;
        while(pos<s.length()-1){
            pos++;
            if(s.charAt(pos)=='(') {
                count += dfs();
            }
            else if(s.charAt(pos)=='x'){
                count++;
            }else if(s.charAt(pos)=='|'){
                max=Math.max(max,count);
                count=0;
            }else{
                break;
            }
        }
        return Math.max(max,count);
    }
}
/*
牛逼,我看了题解以后才知道dfs的妙处,醍醐灌顶了,这题将是开始dfs的起点,具体思路就是
比如输入((xx|xxx)x|(x|xx))xx这个字符串,设置一个全局变量用来记录下标,遇到'('的时候进行递归操作,
直到遇到')'的时候结束递归,代码的执行情况就是遇到第一个'('的时候,进行递归,它的后面还是'(',就继续
递归操作,第二个'('在遇到')'会停止递归,这个时候return的值是Math.max(3,2)==3,然后第一个'('接着
递归,这个时候下标已经在')'后面了,也就是'x',这个时候因为第一次递归加上了第二次dfs()的值,
遇到'|',记录max值为4,遇到'('进行第三次递归,x|xx的时候返回Math.max(1,2)==2,最后第一次递归结束,
就是4+2=6,最后那两x因为遇到最后一个')'没有记录.有那么一点get到深度优先的感觉,有点像大括号里包着
小括号,必须把小括号执行完以后,大括号才能执行完.*/
